package com.example.sprintbootarithmetic.sort.radixsort;

import cn.hutool.core.util.StrUtil;

import java.util.Arrays;

public class RadixSort {
    /**
     * 方法描述
     *
     * @param array  数组
     * @param index  当前是个位还是十位或者百位
     * @param length 数组长度
     * @param max    数组中最大的数组长度
     * @description:
     * @return: String
     * @author: daixingyu
     * @date: 2021-12-19  18:46
     */
    private static String[][] radixsort(String[][] array, int index, int length, int max, int[] intsarray) {
        String[][] numSum = array;
        if (intsarray!=null) {
            Arrays.sort(array);
            for (int j = 0; j < length; j++) {
                //当前数字
                String numStr = StrUtil.toString(intsarray[j]);
                //取到当前数字的指定位数的数字
                int num;
                if (index> numStr.length()) {
                    num = 0;
                } else {
                    num =Integer.parseInt(StrUtil.toString(numStr.charAt(numStr.length() - index )));
                }
                int sum = 0;
                if (numSum == null) {
                    numSum = new String[10][10];
                }
                while (true) {
                    if (StrUtil.isBlank(numSum[num][sum])) {
                        numSum[num][sum] = numStr;
                        break;
                    }
                    sum++;
                }
            }
        } else {
            String[][] numSum2 = new String[10][10];
            for (int i = 0; i < numSum.length; i++) {
                for (int j = 0; j <numSum.length; j++) {
                    String str = numSum[i][j];
                    int num = 0;
                    int sum = 0;
                    if (StrUtil.isNotBlank(str)) {
                        if (index <= str.length()) {
                            num = Integer.parseInt(StrUtil.toString(str.charAt(str.length() - index)));
                        }
                        while (true) {
                            if (StrUtil.isBlank(numSum2[num][sum])) {
                                numSum2[num][sum] = str;
                                break;
                            }
                            sum++;
                        }
                    }
                }
            }
            numSum = numSum2;
        }
        if (index <= max) {
            radixsort(numSum, index + 1, length, max, null);
        }
        return numSum;
    }
    public static void main(String[] args) {
        int[] array = new int[]{1, 2, 43, 53, 2324, 5312, 23};
        Arrays.sort(array);
        int max=array[array.length-1];
        int maxlength = StrUtil.toString(max).length();
        String[][] numsum2 = radixsort(null, 1, array.length, maxlength, array);

    }

}
